package com.ssy.lingxi.member.merchant.utils;

import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;
import java.util.List;

/**
 * 数值类型工具类
 * @author 万宁
 * @version 2.0.0
 * @date 2021-04-06
 */
public class NumberUtil {

    /**
     * 判断Integer是否不为Null且不等于0
     * @param i Integer参数
     * @return 是-true，否-false
     */
    public static boolean notNullOrZero(Integer i) {
        return i != null && !i.equals(0);
    }

    /**
     * 判断Long是否为不为Null且不等于0
     * @param l Long参数
     * @return 是-true，否-false
     */
    public static boolean notNullOrZero(Long l) {
        return l != null && !l.equals(0L);
    }

    /**
     * 判断Long是否为不为Null且不等于0
     * @param l Long参数
     * @return 是-true，否-false
     */
    public static boolean isPositive(Long l) {
        return l != null && l.compareTo(0L) > 0;
    }

    /**
     * 判断Integer是否为Null或等于0
     * @param i Integer参数
     * @return 是-true，否-false
     */
    public static boolean isNullOrZero(Integer i) {
        return i == null || i.equals(0);
    }

    /**
     * 判断BigDecimal是否为Null或等于0
     * @param b BigDecimal参数
     * @return 是-true，否-false
     */
    public static boolean isNullOrZero(BigDecimal b) {
        return b == null || b.compareTo(BigDecimal.ZERO) == 0;
    }

    /**
     * 判断Long是否大于等于0
     * @param l Long参数
     * @return 是-true，否-false
     */
    public static boolean isGteZero(Long l) {
        return l != null && l > 0;
    }

    /**
     * 判断Integer是否大于等于0
     * @param i Integer参数
     * @return 是-true，否-false
     */
    public static boolean isGteZero(Integer i) {
        return i != null && i >= 0;
    }

    /**
     * 判断Long是否为Null或负数
     * @param l Long参数
     * @return 是-true，否-false
     */
    public static boolean isNullOrNegative(Long l) {
        return l == null || l < 0;
    }

    /**
     * 判断Integer是否为Null或负数
     * @param i Integer参数
     * @return 是-true，否-false
     */
    public static boolean isNullOrNegative(Integer i) {
        return i == null || i < 0;
    }

    /**
     * 判断Long是否为Null或等于0
     * @param l Long参数
     * @return 是-true，否-false
     */
    public static boolean isNullOrZero(Long l) {
        return l == null || l.equals(0L);
    }

    /**
     * 将字符串转换为Integer类型
     * @param content 字符串
     * @return 整数，如无法转换返回0
     */
    public static Integer tryParseInteger(String content) {
        try {
            return StringUtils.hasLength(content) ? Integer.parseInt(content) : 0;
        } catch (Exception ingored) {
            return 0;
        }
    }

    /**
     * 判断Long是否为Null或小于等于0
     *
     * @param l Long参数
     * @return 是-true，否-false
     */
    public static boolean isNullOrLteZero(Long l) {
        return l == null || l <= 0;
    }

    /**
     * 将字符串转换为Long类型
     *
     * @param content 字符串
     * @return 整数，如无法转换返回0
     */
    public static Long tryParseLong(String content) {
        try {
            return StringUtils.hasLength(content) ? Long.parseLong(content) : 0L;
        } catch (Exception ingored) {
            return 0L;
        }
    }

    /**
     * 判断两个List是否相同
     * @param first 第一个List
     * @param second 第二个List
     * @return 是-true，否-false
     */
    public static boolean listEqual(List<Long> first , List<Long> second) {
        if(CollectionUtils.isEmpty(first) && CollectionUtils.isEmpty(second)) {
            return true;
        }

        if(CollectionUtils.isEmpty(first) && !CollectionUtils.isEmpty(second)) {
            return false;
        }

        if(!CollectionUtils.isEmpty(first) && CollectionUtils.isEmpty(second)) {
            return false;
        }

        if(first.size() != second.size()) {
            return false;
        }

        if(!first.stream().allMatch(f -> second.stream().anyMatch(s -> s.equals(f)))) {
            return false;
        }

        return second.stream().allMatch(s -> first.stream().anyMatch(f ->f.equals(s)));
    }
}
